#include <head.h>

int main(int argc, char const *argv[])
{

	// 创建子进程，退出父进程。
	pid_t pid = 0;
	if (-1 == (pid = fork()))
	{
		ERRLOG("创建子进程失败");
	}
	if (pid > 0) // 父进程
	{
		exit(0);
	}
	// 在子进程中调用 setsid() 创建新的会话，使子进程成为新的会话首进程，并脱离终端控制。
	pid_t sid = 0;
	if (-1 == (sid = setsid()))
	{
		ERRLOG("创建会话失败");
	}

	// 将当前工作目录更改为根目录，以防止占用挂载点。 chdir()
	if (chdir("/") < 0)
	{
		perror("chdir failed");
		exit(1);
	}

	// 重设文件权限掩码，以避免继承父进程的权限掩码。umask
	umask(0);
	// 关闭不再需要的文件描述符（如标准输入、输出、错误）。
	close(STDIN_FILENO);
	close(STDOUT_FILENO);
	close(STDERR_FILENO);
	// 守护进程进入一个无限循环，执行预定的任务。
	while (1)
	{
		// 在此处执行守护进程的具体任务
		// 例如定时记录日志、处理某些服务请求等

		// 这里简单模拟每隔30秒输出一行日志到文件
		char buf[128] = "日志 明天放假\n";
		int fd = open("/tmp/log.log", O_CREAT | O_WRONLY|O_TRUNC, 0666);

		write(fd, buf, strlen(buf));

		sleep(1);
	}

	return 0;
}